/*
 * Systemprogrammierung
 * Multiplayer-Quiz
 *
 * Server
 *
 * score.h: Implementierung des Score-Agents
 */

#include "common/sockets.h"
#include "score.h"
#include "sync.h"
#include "user.h"

/**	\brief Start des Score-Threads
 *	\param param Standardübergabeparameter des Threads*/

void* score_thread(void* param) {

	/* ** ** ** Solange Score-Thread lebt ** ** */

	while (1) {

		// blockiere solange 0, zähle Semaphor eins runter
		sem_wait(&score_agent_sem);

		// blockiere Userdaten für andere
		userdata_mutex_lock();

		// 37 Byte pro Player-Eintrag * Anzahl der Spieler
		int list_length = 37 * get_client_count();

		// Array für Userliste
		char user_list[list_length];

		// Extrahiere User-Liste aus Userdaten
		if (get_user_list(user_list) == -1) {

		}

		// Benötige Client-Slots um an alle angemeldeten Clients senden zu können
		int* client_slot = get_client_slots();

		// Userliste an Clients senden
		int i;

		// 0 - maximale Useranzahl
		for (i = 0; i < MAX_USERS; i++) {

			// Wenn Slot belegt (User vorhanden)
			if (client_slot[i] == 1) {

				// Hole Socket
				int client_sock = get_client_socket(i);

				if (connection_check(client_sock) == 0) {

					// Sende User-Liste an Socket
					catch_com_err(send_MSG(client_sock, PLAYER_LIST, list_length, user_list));
				}
			}
		}

		// Gib Userdaten Zugriff wieder frei
		userdata_mutex_unlock();
	}

	/* ** ** ** Ende Score-Thread ** ** */

	return NULL;
}
